Software transactional memory (STM) is a concurrency control mechanism analogous to database transactions for controlling access to shared memory in concurrent computing. A transaction in the context of transactional memory is a piece of code that executes a series of reads and writes to shared memory. STM is used as an alternative to traditional locking mechanisms. Programmers put a declarative annotation (e.g. atomic) around a code block to indicate safety properties they require and the system automatically guarantees that this block executes atomically with respect to other protected code regions. The software transactional memory programming model prevents lock-based priority-inversion and deadlock problems.
Software transactional memory (STM) systems can take certain sequential programs and allow for portions of those programs to be executed concurrently (e.g. in parallel) using transactions. The source code for these sequential programs is typically written by programmers using one of various types of programming languages. The source code is typically enclosed in one or more functions that contain the logic that is later executed by a computer. The term “function” is used broadly herein as covering functions, methods, procedures, statement blocks, and/or other portions of logic that are executed by a computer. With software transactional memory systems, every function that can be called from a transactional context must have two versions, one that can be called from transactions and one that can be called from non-transactions. Determining which version of the function to call is context dependent. This determination must be done at runtime for calls to virtual functions or through function pointers.